Function.prototype.myCall = function (context, ...args) {
  // 判断传入的值 没传入默认指向window
  let _this = context || window;
  // 将要执行的函数变成传入对象的属性
  _this.fn = this;
  // 返回执行结果
  let result = _this.fn(...args);
  delete _this.fn;
  return result;
};

Function.prototype.myApply = function (context, arry) {
  // 判断传入的值 没传入默认指向windo
  let _this = context || window;
  // 将要执行的函数变成传入对象的属性
  _this.fn = this;
  //判断第二个参数是否存在
  let result = arry ? _this.fn(...arry) : _this.fn();
  delete _this.fn;
  return result;
};

Function.prototype.myBind = function (context, ...arg) {
  //判断传入的值 没传入则默认指向window
  let _this = context || window;
  // 将要执行的函数变成传入对象的属性
  _this.fn = this;
  //   返回一个匿名函数
  return function (...args) {
    //   执行函数
    return _this.fn(...arg, ...args);
  };
};
